import type { Element } from 'bpmn-js/lib/model/Types'
import type BpmnModeler from 'bpmn-js/lib/Modeler'

// 基础属性表单
export interface BasicForm {
  id: string
  name: string
}

// 网关配置
export interface GatewayConfig {
  defaultFlow: string
}

// 连线配置
export interface SequenceConfig {
  flowType: FlowType
  buttonType?: ButtonType
  conditionExpression: string
}

// 服务任务配置
export interface ServiceConfig {
  implementationType: 'class' | 'expression' | 'delegateExpression'
  implementation: string
  async: boolean
}

// 事件配置
export interface EventConfig {
  eventDefinitionType: 'message' | 'signal' | 'timer' | ''
  messageName: string
  signalName: string
  timerDefinitionType: 'timeDate' | 'timeDuration' | 'timeCycle' | ''
  timerDefinition: string
}

// 监听器配置
export interface Listener {
  event: 'start' | 'end' | 'take'
  type: 'class' | 'expression' | 'delegateExpression'
  value: string
}

// 属性面板Props
export interface PropertyPanelProps {
  visible: boolean
  currentElement: Element | null
  modeler: BpmnModeler
}

// 在已有的类型定义中添加
export type EmptyApproverStrategy = 'auto_pass' | 'auto_reject' | 'specified_user'

export interface AssigneeConfig {
  emptyStrategy: EmptyApproverStrategy
  assigneeType: 'user' | 'role' | 'group' | 'position' | 'expression'
  assigneeValue: string
  buttons: ButtonConfig[]
}

export interface FormField {
  id: string
  name: string
  type: string
  permission: 'write' | 'read' | 'hidden'
  required: boolean
  values?: string
}

export interface FormConfig {
  formKey: string
  formReadOnly: boolean
  formSubmit: boolean
  fields: FormField[]
}

// 按钮类型
export type ButtonType =
  | 'agree' // 同意
  | 'reject' // 拒绝
  | 'return' // 驳回
  | 'revoke' // 撤销
  | 'delegate' // 指派
  | 'addSign' // 加签
  | 'reduceSign' // 减签
  | 'terminate' // 终止
  | 'intervene' // 干预

// 按钮配置
export interface ButtonConfig {
  id: string
  name: string
  type: ButtonType
  sort: number
  enabled: boolean
}

// 流转类型
export type FlowType = 'normal' | 'default' | 'button' | 'condition'

// 添加会签设置相关类型
export interface MultiInstanceConfig {
  isSequential: boolean // 是否串行
  loopCardinality: string // 循环次数
  collection: string // 集合表达式
  elementVariable: string // 元素变量
  completionCondition: string // 完成条件
}

// 更新用户任务配置类型
export interface UserTaskConfig {
  // ... 其他配置保持不变
  multiInstance?: MultiInstanceConfig // 会签配置
}
